
package com.ditt.forum.jdbc;

import java.sql.*;
import java.util.*;

public class EnsembleMessagesForum
{
  private ArrayList messages = new ArrayList ();

  /**
   * Ajoute un message a cet ensemble.
   */
  public void ajouter (Message message)
  {
    this.messages.add (message);
  }

  /**
   * Renvoie un iterateur permettant d'enumerer les messages
   * de cet ensemble.
   */
  public Iterator iterator ()
  {
    return this.messages.iterator();
  }

  public void rechercherSujets (ConnecteurForum connecteur)
                                         throws SQLException
  {
    PreparedStatement rechercheSujets =
      connecteur.getConnexion().prepareStatement (
        "SELECT ID, AUTEUR, MAX(DATECREATION) AS DATECREATION,"
        + " SUJET, TEXTE FROM MESSAGE GROUP BY SUJET"
        + " ORDER BY DATECREATION DESC");
    rechercher(rechercheSujets, null);
    rechercheSujets.close();
  }

  public void rechercherMessagesSujet (ConnecteurForum connecteur,
                         String sujet) throws SQLException
  {
    PreparedStatement rechercheMessagesSujet =
      connecteur.getConnexion().prepareStatement (
        "SELECT * FROM MESSAGE"
        + " WHERE SUJET=? ORDER BY DATECREATION ASC");
    rechercher (rechercheMessagesSujet, new Object [] {sujet});
    rechercheMessagesSujet.close();
  }

  private void rechercher(PreparedStatement instructionRecherche,
                         Object [] parametresInstruction)
                                             throws SQLException
  {
    if (parametresInstruction != null)
      for (int i = 0; i < parametresInstruction.length; i++)
        instructionRecherche.setObject (
                               i + 1, parametresInstruction [i]);
    ResultSet resultat = instructionRecherche.executeQuery();
    while (resultat.next())
    {
      MessageForum message = new MessageForum ();
      message.setId (resultat.getInt("ID"));
      message.setAuteur (resultat.getString("AUTEUR"));
      message.setDateCreation (
                         resultat.getTimestamp("DATECREATION"));
      message.setSujet (resultat.getString("SUJET"));
      message.setTexte (resultat.getString("TEXTE"));
      ajouter(message);
    }
    resultat.close();
  }
}
